# -*- coding: utf-8 -*-
"""
    author: Ye
    date: 2021/01/26 15:09
"""
import jwt
import datetime
from utils import response_err


def get_token(username, user_id):
    token_dict = {
        'exp': datetime.datetime.now() + datetime.timedelta(days=7),  # 时间戳　　
        'username': username,  # 自定义的参数
        'user_id': user_id
    }
    headers = {
        'alg': "HS256",  # 声明所使用的算法
    }
    jwt_token = jwt.encode(token_dict, "123",  # 进行加密签名的密钥
                           algorithm="HS256",  # 指明签名算法方式, 默认也是HS256
                           headers=headers  # json web token 数据结构包含两部分, payload(有效载体), headers(标头)
                           )
    return jwt_token


def get_res(token):
    try:
        # 需要解析的 jwt        密钥                使用和加密时相同的算法
        data = jwt.decode(token, "123", algorithms=['HS256'])
    except Exception as e:
        # 如果 jwt 被篡改过; 或者算法不正确; 如果设置有效时间, 过了有效期; 或者密钥不相同; 都会抛出相应的异常
        print(e)
        raise response_err.Error401(e)
    return data


if __name__ == '__main__':

    print(get_token('12',12))
    print(get_res('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTI3ODA0MDYsInVzZXJuYW1lIjoiMTIiLCJ1c2VyX2lkIjoxMn0.t9sX566-MzwmZ9OdCOw6HER8vPHGNBFE40N0qgo2TqE'))